import axios from 'axios'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import { message } from 'antd'
import { refreshToken } from '@/api'

const instance = axios.create();

instance.defaults.baseURL = '/api';
instance.defaults.timeout = 3000;

// 添加请求拦截器
instance.interceptors.request.use((config) => {
    // token添加到请求头
    config.headers.Authorization = localStorage.getItem('token') ? localStorage.getItem('token') : '';
    // 开启顶部进度条
    Nprogress.start();
    // 在发送之前做些什么
    return config
}, (error) => {
    // 对请求错误做些什么
    return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use((response) => {
    // 对响应成功做些什么
    // 关闭进度条
    Nprogress.done();
    return response.data;
},
    async (error) => {
        console.log(error);
        const code = error.response.status;
        // token失效，先拿到refreshToken, 然后重新获取token并存入本地
        if (code == 401) {
            await refreshToken({
                refreshToken: localStorage.getItem('refreshToken')
            }).then(res => {
                console.log(res, "******获取无感刷新的token*****")
                if (res.code == 0) {
                    // 当无感刷新的token跟token同时失效后，返回到登录页面进行重新登录
                    window.location.href = '/login'
                } else {
                    localStorage.setItem('token', res.token)
                    localStorage.setItem('refreshToken', res.refreshToken)
                }
            })
            return instance(error.config)
        }
        else if (code === 400) {
            message.error('请求错误')
        } else if (code === 403) {
            message.error('拒绝请求')
        } else if (code === 404) {
            message.error('页面找不到')
        } else if (code === 500) {
            message.error('服务器内部错误')
        } else if (code === 502) {
            message.error('错误网关')
        }
        // 关闭进度条
        Nprogress.done();
        return Promise.reject(error)
    })

export default instance;